package com.glsc.ngateway.common.base.converter.ldap;

import com.glsc.ngateway.common.api.ldap.dto.LdapEhrDeptDto;
import com.glsc.ngateway.common.base.domain.mysql.gateway.ldap.LdapEhrDept;
import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class LdapEhrDeptConverter {
    @Nullable
    public static LdapEhrDept dto2Domain(LdapEhrDeptDto dto) {
        return Objects.isNull(dto) ? null : LdapEhrDept.builder()
                .depid(dto.getDepid())
                .dtitle(dto.getDtitle())
                .comptitle(dto.getComptitle())
                .adminid(dto.getAdminid())
                .atitle(dto.getAtitle())
                .depgrade(dto.getDepgrade())
                .leader(dto.getLeader())
                .lname(dto.getLname())
                .oaDeptId(dto.getOaDeptId())
                .superOaDeptId(dto.getSuperOaDeptId())
                .superDeptId(dto.getSuperDeptId())
                .canceled(dto.getCanceled())
                .leaderEmail(dto.getLeaderEmail())
                .parentDeptInfo(LdapEhrDeptConverter.dto2Domain(dto.getParentDeptInfo()))
                .build();
    }

    @Nullable
    public static List<LdapEhrDept> dto2Domain(List<LdapEhrDeptDto> dto) {
        return CollectionUtils.isEmpty(dto) ? null: dto.stream().map(LdapEhrDeptConverter::dto2Domain).collect(Collectors.toList());
    }

    @Nullable
    public static LdapEhrDeptDto domain2Dto(LdapEhrDept dto) {
        return Objects.isNull(dto) ? null : LdapEhrDeptDto.builder()
                .depid(dto.getDepid())
                .dtitle(dto.getDtitle())
                .comptitle(dto.getComptitle())
                .adminid(dto.getAdminid())
                .atitle(dto.getAtitle())
                .depgrade(dto.getDepgrade())
                .leader(dto.getLeader())
                .lname(dto.getLname())
                .oaDeptId(dto.getOaDeptId())
                .superOaDeptId(dto.getSuperOaDeptId())
                .superDeptId(dto.getSuperDeptId())
                .canceled(dto.getCanceled())
                .leaderEmail(dto.getLeaderEmail())
                .parentDeptInfo(LdapEhrDeptConverter.domain2Dto(dto.getParentDeptInfo()))
                .build();
    }

    @Nullable
    public static List<LdapEhrDeptDto> domain2Dto(List<LdapEhrDept> domain) {
        return CollectionUtils.isEmpty(domain) ? null: domain.stream().map(LdapEhrDeptConverter::domain2Dto).collect(Collectors.toList());
    }
}
